//
// Created by zch on 2020/4/2.
// 计算数据类型的字节数
//
#include <float.h>
#include <stdio.h>
int calcSize() {
  //	1、%d 十进制有符号整数。
  //	2、%u 十进制无符号整数。
  //	3、%ld 输出long整数 。
  //	4、%s 字符复串。
  //	5、%c 单个字符。
  //	6、%p 指针的值。
  //	7、%e 指数形式的浮点数。
  //	8、%x, %X 无符号以十六进制表示的整数。
  //	9、%0 无符号以八进制制表示的整数。
  //	10、%g 自动选择合适的表百示法。
  /* ----------------------------------- */
  // 整数类型
  //	类型	存储大小	值范围
  //	char	1 字节	-128 到 127 或 0 到 255
  //	unsigned char	1 字节	0 到 255
  //	signed char	1 字节	-128 到 127
  //	int	2 或 4 字节	-32,768 到 32,767 或 -2,147,483,648 到
  // 2,147,483,647 	unsigned int	2 或 4 字节	0 到 65,535 或 0 到
  // 4,294,967,295 	short	2 字节	-32,768 到 32,767 	unsigned short
  // 2 字节 0 到 65,535 	long	4 字节	-2,147,483,648 到 2,147,483,647
  // unsigned long 4 字节	0 到 4,294,967,295
  printf("char 存储大小 : %u 字节\n", sizeof(char));
  printf("unsigned char 存储大小 : %u 字节\n", sizeof(unsigned char));
  printf("signed char 存储大小 : %u 字节\n", sizeof(signed char));
  printf("int 存储大小 : %u 字节\n", sizeof(int));
  printf("unsigned int 存储大小 : %u 字节\n", sizeof(unsigned int));
  printf("signed int 存储大小 : %u 字节\n", sizeof(signed int));
  printf("short 存储大小 : %u 字节\n", sizeof(short));
  printf("unsigned short 存储大小 : %u 字节\n", sizeof(unsigned short));
  printf("signed short 存储大小 : %u 字节\n", sizeof(signed short));
  printf("long 存储大小 : %u 字节\n", sizeof(long));
  printf("unsigned long 存储大小 : %u 字节\n", sizeof(unsigned long));
  printf("signed long 存储大小 : %u 字节\n", sizeof(signed long));
  //  char 存储大小 : 1 字节
  //  unsigned char 存储大小 : 1 字节
  //  signed char 存储大小 : 1 字节
  //  int 存储大小 : 4 字节
  //  unsigned int 存储大小 : 4 字节
  //  signed int 存储大小 : 4 字节
  //  short 存储大小 : 2 字节
  //  unsigned short 存储大小 : 2 字节
  //  signed short 存储大小 : 2 字节
  //  long 存储大小 : 4 字节
  //  unsigned long 存储大小 : 4 字节
  //  signed long 存储大小 : 4 字节
  /* ----------------------------------- */
  // 浮点类型
  // 类型	存储大小	值范围	精度
  // float	4 字节	1.2E-38 到 3.4E+38	6 位小数
  // double	8 字节	2.3E-308 到 1.7E+308	15 位小数
  // long double	16 字节	3.4E-4932 到 1.1E+4932	19 位小数
  printf("float 存储最大字节数 : %u \n", sizeof(float));
  // %E 为以指数形式输出单、双精度实数
  printf("float 最小值: %E\n", FLT_MIN);
  printf("float 最大值: %E\n", FLT_MAX);
  printf("精度值: %d\n", FLT_DIG);
  /* ----------------------------------- */
//  void 类型
//  void 类型指定没有可用的值。它通常用于以下三种情况下：
//  序号	类型与描述
//  1	函数返回为空
//  C 中有各种函数都不返回值，或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status);
//  2	函数参数为空
//  C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void);
//  3	指针指向 void
//  类型为 void * 的指针代表对象的地址，而不是类型。例如，内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针，可以转换为任何数据类型。
  return 0;
}
int main() { calcSize(); }